#ifndef FPSCAMERA_HPP_
# define FPSCAMERA_HPP_

# include "3D/Camera.hpp"

class FPSCamera: public Camera
{
public:
    FPSCamera();
    FPSCamera(Vec3f const& position, Vec3f const& lookedPoint, Vec3f const& orientation);

    Vec3f const&    getForward() const;
    void            setForward(Vec3f const& forward);
    void            setForward(float x, float y, float z);

    Vec3f const&    getLeft() const;
    void            setLeft(Vec3f const& left);
    void            setLeft(float x, float y, float z);

    float           getTheta() const;
    void            setTheta(const float theta);

    float           getPhi() const;
    void            setPhi(const float phi);

    float           getSpeed() const;
    void            setSpeed(const float speed);

    float           getSensivity() const;
    void            setSensivity(const float sensivity);

    void            computeVectors();

    void            moveForward(int elapsedTime);
    void            moveBackward(int elapsedTime);
    void            moveLeft(int elapsedTime);
    void            moveRight(int elapsedTime);

private:
    Vec3f       _forward;
    Vec3f       _left;
    float       _theta;
    float       _phi;

    float       _speed;
    float       _sensivity;
};

#endif // FPSCAMERA_HPP_
